home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / TWAT,S < prev    next >
Text File  |  1988-07-19  |  17KB  |  942 lines

  1. ; ****************************************
  2. ; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
  3. ; ** CODED BY: TANGO                    **
  4. ; ** MUSIC BY: COUNT                    **
  5. ; ****************************************
  6.  
  7.     opt c-
  8.     section blitter,code_c            Chip Ram please !!
  9.     include    df1:definitions            Give me some hardware reggies
  10.     include    df1:macros                Give me some macros
  11.     
  12.         
  13. ;LOCAL CONSTANTS
  14.  
  15. icra        equ $bfed01                
  16. ;allocmem     =-30-168                
  17. ;freemem     =-30-180                
  18. fontmemory    =4000
  19. MEMF_CHIP    EQU    1<<1        
  20. MEMF_CLEAR    EQU    1<<16        
  21. MEMORY    EQU    MEMF_CHIP+MEMF_CLEAR    ;allocates chip ram and clears it
  22.  
  23.  
  24.  
  25. TAKEOVER:
  26.     LEA custom,a5        
  27.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  28.     MOVEQ #0,D0                     Doesn't matter which version
  29.      MOVE.L 4.w,a6                 EXECBASE
  30.     jsr    -132(a6)                 task switching off (forbid)
  31.      JSR -$228(a6)                  Openlibrary
  32.      MOVE.L D0,GFXBASE             Store library address
  33.     jsr    cyb_init
  34.         
  35. ;Now put the graphic addresses in the CopperList         
  36.  
  37.      move.l    screenx,d1            Bitplane memory address
  38.     move.w    d1,bp1lo+2            for scroll 1.
  39.      swap    d1
  40.      move.w    d1,bp1hi+2
  41.  
  42.      move.l    screenx,d1            Bitplane memory address
  43.     ADD.L    #10000,D1
  44.     move.w    d1,bp3lo+2            for scroll 1.
  45.      swap    d1
  46.      move.w    d1,bp3hi+2
  47.  
  48.      move.l    screenx,d1            Bitplane memory address
  49.     ADD.L    #10000*2,D1
  50.     move.w    d1,bp5lo+2            for scroll 1.
  51.      swap    d1
  52.      move.w    d1,bp5hi+2
  53.  
  54.      move.l    screeny,d1            Bitplane memory address
  55.     move.w    d1,abp1lo+2            for scroll 2.
  56.      swap    d1
  57.      move.w    d1,abp1hi+2
  58.  
  59.     move.l    screeny,d1            Bitplane memory address
  60.     ADD.L    #10000,D1
  61.     move.w    d1,abp3lo+2            for scroll 2.
  62.      swap    d1
  63.      move.w    d1,abp3hi+2
  64.  
  65.     move.l    screeny,d1            Bitplane memory address
  66.     ADD.L    #10000*2,D1
  67.     move.w    d1,abp5lo+2            for scroll 2.
  68.      swap    d1
  69.      move.w    d1,abp5hi+2
  70.  
  71.  
  72. ; ** SET UP EVEN BITPLANES 2,4,6 **
  73.  
  74.     MOVE.L    #PLAY2,D1
  75.     MOVE.W    D1,BP2LO+2
  76.     SWAP    D1
  77.     MOVE.W    D1,BP2HI+2
  78.     
  79.     MOVE.L    #PLAY2,D1
  80.     ADD.L    #10240,D1
  81.     MOVE.W    D1,BP4LO+2
  82.     SWAP    D1
  83.     MOVE.W    D1,BP4HI+2
  84.     
  85.     MOVE.L    #PLAY2,D1
  86.     ADD.L    #10240*2,D1
  87.     MOVE.W    D1,BP6LO+2
  88.     SWAP    D1
  89.     MOVE.W    D1,BP6HI+2
  90.     
  91.      move.l GFXBASE,d0            Move gfxbase offset to d0
  92.      MOVE.L D0,A6                
  93.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  94.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  95.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  96.      MOVE.W #$8080,dmacon(a5)    Re-enable copper
  97.      MOVE.W #$8010,intena(a5)        
  98.      MOVE.L $6c,old                Save work bench interrupt
  99.      MOVE.L #LEV3,$6c            Point to were to set up interrupt
  100.     move.w    intenar(a5),systemints
  101.     move.b    #%01111111,icra        Kill keyboard.
  102.         
  103. WAIT:     
  104.     BTST #6,$BFE001                This waits for the left
  105.      BNE.S    WAIT                mouse button to be pressed
  106.     move.l    4.w,a6                EXECBASE
  107.      MOVE.L old,$6c                Restore system interrupts
  108.     MOVE.L GFXBASE,A6
  109.      MOVE.W #$80,dmacon(a5)        Disable DMA
  110.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  111.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  112.      move.w    systemints,d0        Systems interrupt
  113.      or.w    #$c000,d0
  114.      move.w    d0,intena(a5)        Enable OS interrupts
  115.      move.b    #%10011011,icra        Enable keyboard
  116.     clr.w    $dff0a8                Clear music
  117.     clr.w    $dff0b8
  118.     clr.w    $dff0c8
  119.     clr.w    $dff0d8
  120.     move.w    #$f,$dff096
  121.     rts
  122.  
  123.  
  124. ERROR:    
  125.     move.l 4.w,a6                Get EXECBASE
  126.     jsr    -138(a6)                Permit ( multi-tasking on )
  127.     moveq    #0,d0                Clear d0
  128.      RTS                            Return to AmigaDOS
  129.  
  130.  
  131. ;This is the NEW level 3 interrupt
  132.  
  133. LEV3:
  134.      Save_all                    Save all registers to the stack
  135.     lea    custom,a5
  136.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  137.     BNE out
  138.     move.w    #$8010,$9c            Cause Copper interrupt                                
  139.  
  140. ; ** Main Routines called every VBI **
  141.     
  142.     bsr    bounce2
  143.     bsr    testscroll
  144. ;    bsr    bounce
  145. ;    bsr    testscroll2
  146.     jsr    cyb_music
  147.             
  148. out:     
  149.     Return_all
  150.     DC.W $4ef9                    hex value for  JMP instruction
  151. old:     
  152.     DC.L 0                        will jump to normal interrupt
  153.  
  154.  
  155. ; ** THE SCROLL ROUTINE **
  156.  
  157. testscroll:
  158.     tst.l    stopper
  159.     beq.s    scroll
  160.     sub.l    #1,stopper
  161.     rts
  162. scroll:
  163.     cmp.l    #30,val                    Blitshifted all <<<
  164.     blo.s    coarse_scroll_it        No then get doing it !!
  165.     bsr        blit_char                Blit letter to screen
  166.     clr.l    val                        Reset index
  167. coarse_scroll_it:
  168.     bsr        coarse                    Scroll all line
  169.     rts                            
  170.  
  171. testscroll2:
  172.     tst.l    stopper2                Test for pause.
  173.     beq.s    scroll2
  174.     sub.l    #1,stopper2
  175.     rts
  176. scroll2:
  177.     cmp.l    #30,val2                Blitshifted all <<<
  178.     blo.s    coarse_scroll_it2        No then get doing it blitter man !!
  179.     bsr        blit_char2                Blit letter to screen
  180.     clr.l    val2                    Reset index
  181. coarse_scroll_it2:
  182.     bsr        coarse2                    Scroll all line
  183.     rts                            
  184.  
  185.     
  186. ; ** BLIT LETTER ON THE SCREEN **
  187.  
  188. blit_char
  189.     jsr        text
  190.     lea        custom,a5                Get custom chip address
  191.     move.l    screenx,a0                 The screen on which scrolly is.
  192.     move.l    #font,a1                 Put font in blitter source
  193.     add.l    d1,a1
  194.     MOVE.L    #2,D2
  195. blit_test:
  196.     btst    #14,$dff002                 Blitter busy !!!
  197.     bne    blit_test                     Lets wait till she finishes !
  198.     move.w    #$ffff,bltafwm(a5)        Mask 
  199.     move.w    #$ffff,bltalwm(a5)        Mask 
  200.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  201.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  202.     move.w    #36,bltamod(a5)             Modulo (20-1)*2
  203.     move.w    #36,bltdmod(a5)             Modulo (20-1)*2
  204.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  205.     clr.w    bltcon1(a5)                 Set Ascending mode
  206.      move.w    #32*64+2,bltsize(a5)     Blit size (SIZE OF FONT)
  207.     ADD.L    #10000,A0
  208.     ADD.L    #40*200,A1
  209.     DBF        D2,BLIT_TEST
  210.     rts                                  Return
  211.  
  212.  
  213. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  214. ;
  215. ;     FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
  216.  
  217. coarse:
  218.     lea        custom,a5                 
  219.     move.l    screenx,a0                
  220.     move.l    a0,a1
  221.     add.l    #2,a1
  222.     move.l    #2,d1
  223.     move    #12,d2                
  224.     incl    #4,val                    
  225.     ror        #4,d2                    ; Set to correct bits (12-15)
  226.     or.w    #$09f0,d2
  227. blit_wait:
  228.     btst    #14,$dff002            
  229.     bne        blit_wait
  230.     move.l    #-1,bltafwm(a5)
  231.     move.l    a1,bltapth(a5)
  232.     move.l    a0,bltdpth(a5)
  233.     move.w    #0,bltamod(a5)
  234.     move.w    #0,bltdmod(a5)
  235.     move.w    d2,bltcon0(a5)    
  236.     move.w    #32*64+20,bltsize(a5)
  237.     add.l    #10000,a0
  238.     add.l    #10000,a1
  239.     dbf        d1,blit_wait
  240.     rts    
  241.  
  242.  
  243.  
  244. ; ** SCROLL NUMBER TWO **
  245. ;
  246. ; DOCUMENTED IN SCROLL NUMBER ONE.
  247.  
  248. blit_char2:
  249.     jsr        text2
  250.     lea        custom,a5                
  251.     move.l    screeny,a0                 
  252.     move.l    #font,a1                 
  253.     add.l    d2,a1
  254.     MOVE.L    #2,D6
  255. blit_test2:
  256.     btst    #14,$dff002                 
  257.     bne    blit_test2                     
  258.     move.w    #$ffff,bltafwm(a5)        
  259.     move.w    #$ffff,bltalwm(a5)        
  260.     move.l    a0,bltdpth(a5)             
  261.     move.l    a1,bltapth(a5)             
  262.     move.w    #36,bltamod(a5)             
  263.     move.w    #36,bltdmod(a5)             
  264.     move.w    #$9f0,bltcon0(a5)         
  265.     clr.w    bltcon1(a5)                 
  266.      move.w    #32*64+2,bltsize(a5)     
  267.     ADD.L    #10000,A0
  268.     ADD.L    #40*200,A1
  269.     DBF        D6,BLIT_TEST2
  270.     rts                                  
  271.  
  272. coarse2:
  273.     lea        custom,a5                 
  274.     move.l    screeny,a0                
  275.     move.l    a0,a1
  276.     add.l    #2,a1
  277.     move.l    #2,d4
  278.     incl    #4,val2                    
  279.     move    #12,d7                
  280.     ror        #4,d7                    
  281.     or        #%100111110000,d7        
  282. blit_wait2:
  283.     btst    #14,$dff002            
  284.     bne        blit_wait2
  285.     move.l    #-1,bltafwm(a5)
  286.     move.l    a1,bltapth(a5)
  287.     move.l    a0,bltdpth(a5)
  288.     move.w    #0,bltamod(a5)
  289.     move.w    #0,bltdmod(a5)
  290.     move.w    d7,bltcon0(a5)    
  291.     move.w    #32*64+20,bltsize(a5)
  292.     add.l    #10000,a0
  293.     add.l    #10000,a1
  294.     dbf        d4,blit_wait2
  295.     rts
  296.     
  297.  
  298.  
  299.  
  300. ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
  301. ;
  302. ;     ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
  303. ;             : DELTAY-WAIT COMMAND IN COPPERLIST.
  304. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  305.  
  306. bounce:
  307.     cmp.l    #66,ycord
  308.     beq.s    up
  309.     add.l    #1,ycord
  310.     sub.b    #1,deltay
  311.     rts
  312. up: cmp.l    #66,ycordminus
  313.     beq.s    rst_cord
  314.     add.l    #1,ycordminus
  315.     add.b    #1,deltay
  316.     rts
  317. rst_cord:
  318.     clr.l    ycord
  319.     clr.l    ycordminus
  320.     rts
  321.     
  322.     even
  323.  
  324.  
  325. ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
  326. ;
  327. ;     ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
  328. ;             : DELTAY2-WAIT COMMAND IN COPPERLIST.
  329. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  330.  
  331. bounce2:
  332.     cmp.l    #66,ycord2
  333.     beq.s    up2
  334.     add.l    #1,ycord2
  335.     add.b    #1,deltay2
  336.     rts
  337. up2:cmp.l    #66,ycordminus2
  338.     beq.s    rst_cord2
  339.     add.l    #1,ycordminus2
  340.     sub.b    #1,deltay2
  341.     rts
  342. rst_cord2:
  343.     clr.l    ycord2
  344.     clr.l    ycordminus2
  345.     rts
  346.     
  347.     even
  348.  
  349.  
  350. ; ** CHARACTER DECODER ROUTINE **
  351.  
  352. ;    CHARACTER BASE ADDRESS RETURNED IN D2
  353. ;     JUST ADD THIS TO YOUR FONT ADDREES.
  354.  
  355. text:
  356.     move.l    acurent,a2                
  357.     clr.l    d1                        
  358.     move.b    (a2)+,d1                
  359.     move.b    d1,letter                
  360.     cmp.b    #255,d1                    
  361.     beq.w    rst_text                
  362.     cmp.b    #254,d1
  363.     beq        stop
  364.     sub.l    #32,d1                    
  365.     asl        d1                        
  366.     asl        d1
  367.     SUB.L    #12,D1
  368.     move.l    a2,acurent                
  369. ;    CMP.B    #"4",letter            
  370. ;    BPL.s    add_more
  371.     rts                                
  372. add_more:
  373.     CMP.B    #"H",letter            
  374.     BPL.S    add_more3
  375.     add.l    #40*15,d1                
  376.     rts
  377. add_more3:                    
  378.     add.l    #40*30,d1                
  379.     rts
  380. rst_text:
  381.     move.l    #0,d1
  382.     move.l    #message,d2            
  383.     move.l    d2,acurent                
  384.     rts                                
  385. stop:
  386.     move.l    #0,d1
  387.     add.l    #1,acurent
  388.     move.l    #150,stopper
  389.     rts
  390.  
  391.  
  392. ; ** MESSAGE NUMBER ONE **
  393. Acurent:
  394.     DC.L    message
  395. message:
  396.     DC.B    "ABCDEFGHIJK"
  397.     DC.B    255
  398.     even
  399.  
  400.  
  401. text2:
  402.     Clr.l    d1
  403.     move.l    acurent2,a2
  404.     move.b    (A2),d1
  405.     cmp.b    #254,d1
  406.     beq        pause_scroll
  407.     Cmp.b    #255,d1
  408.     bne        over2
  409.     Move.l    #Texter2,a2
  410.     MOVE.L    #TEXTER2,ACURENT2        ; RESET TO BEGINING OF MESSAGE.
  411.     Move.b    (a2),d1
  412. Over2:
  413.     Add.l    #1,Acurent2
  414. ;    Lea        Char,a1
  415.     Sub.l    #32,d1
  416.     Add.l    d1,d1
  417.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  418.     rts
  419. pause_scroll:
  420.     move.l    #5136,d2
  421.     add.l    #1,acurent2
  422.     move.l    #150,stopper2
  423.     rts
  424.  
  425.  
  426. ; ** MESSAGE NUMBER TWO **
  427.     even
  428. Acurent2
  429.     Dc.l    Texter2
  430. Texter2:
  431.     Dc.b    "WOW !!!  THIZ IS SCROLLER NUMBER 2 ",254," AND ITS COOOOOL... ",255
  432.     even
  433.  
  434.  
  435. ;                **********************************************
  436. ;                ** THE MUZAX PLAY ROUTINE FOR NOISE TRACKER ** 
  437. ;                  ******************************************
  438.  
  439.  
  440. MUZAX:
  441.  
  442.     jsr    CYB_init
  443.  
  444. end:    rts
  445. CYB_init:lea    CYB_data,a0
  446.     add.l    #$03b8,a0
  447.     moveq    #$7f,d0
  448.     moveq    #0,d1
  449. CYB_init1:
  450.     move.l    d1,d2
  451.     subq.w    #1,d0
  452. CYB_init2:
  453.     move.b    (a0)+,d1
  454.     cmp.b    d2,d1
  455.     bgt.s    CYB_init1
  456.     dbf    d0,CYB_init2
  457.     addq.b    #1,d2
  458. CYB_init3:
  459.     lea    CYB_data,a0
  460.     lea    CYB_sample1(pc),a1
  461.     asl.l    #8,d2
  462.     asl.l    #2,d2
  463.     add.l    #$438,d2
  464.     add.l    a0,d2
  465.     moveq    #$1e,d0
  466. CYB_init4:
  467.     move.l    d2,(a1)+
  468.     moveq    #0,d1
  469.     move.w    42(a0),d1
  470.     asl.l    #1,d1
  471.     add.l    d1,d2
  472.     add.l    #$1e,a0
  473.     dbf    d0,CYB_init4
  474.     lea    CYB_sample1(PC),a0
  475.     moveq    #0,d0
  476. CYB_clear:
  477.     move.l    (a0,d0.w),a1
  478.     clr.l    (a1)
  479.     addq.w    #4,d0
  480.     cmp.w    #$7c,d0
  481.     bne.s    CYB_clear
  482.     clr.w    $dff0a8
  483.     clr.w    $dff0b8
  484.     clr.w    $dff0c8
  485.     clr.w    $dff0d8
  486.     clr.l    CYB_partnrplay
  487.     clr.l    CYB_partnote
  488.     clr.l    CYB_partpoint
  489.     move.b    CYB_data+$3b6,CYB_maxpart+1
  490.     rts
  491.     rts
  492. CYB_music:
  493.     addq.w    #1,CYB_counter
  494. CYB_cool:cmp.w    #6,CYB_counter
  495.     bne.s    CYB_notsix
  496.     clr.w    CYB_counter
  497.     bra    CYB_rout2
  498. CYB_notsix:
  499.     lea    CYB_aud1temp(PC),a6
  500.     tst.b    3(a6)
  501.     beq.s    CYB_arp1
  502.     lea    $dff0a0,a5        
  503.     bsr.s    CYB_arprout
  504. CYB_arp1:lea    CYB_aud2temp(PC),a6
  505.     tst.b    3(a6)
  506.     beq.s    CYB_arp2
  507.     lea    $dff0b0,a5
  508.     bsr.s    CYB_arprout
  509. CYB_arp2:lea    CYB_aud3temp(PC),a6
  510.     tst.b    3(a6)
  511.     beq.s    CYB_arp3
  512.     lea    $dff0c0,a5
  513.     bsr.s    CYB_arprout
  514. CYB_arp3:lea    CYB_aud4temp(PC),a6
  515.     tst.b    3(a6)
  516.     beq.s    CYB_arp4
  517.     lea    $dff0d0,a5
  518.     bra.s    CYB_arprout
  519. CYB_arp4:    rts
  520. CYB_arprout:
  521.     move.b    2(a6),d0
  522.     and.b    #$0f,d0
  523.     tst.b    d0
  524.     beq    CYB_arpegrt
  525.     cmp.b    #$01,d0
  526.     beq.s    CYB_portup
  527.     cmp.b    #$02,d0
  528.     beq.s    CYB_portdwn
  529.     cmp.b    #$0a,d0
  530.     beq.s    CYB_volslide
  531.     rts
  532. CYB_portup:
  533.     moveq    #0,d0
  534.     move.b    3(a6),d0
  535.     sub.w    d0,22(a6)
  536.     cmp.w    #$71,22(a6)
  537.     bpl.s    CYB_ok1
  538.     move.w    #$71,22(a6)
  539. CYB_ok1:    move.w    22(a6),6(a5)
  540.     rts
  541. CYB_portdwn:
  542.     moveq    #0,d0
  543.     move.b    3(a6),d0
  544.     add.w    d0,22(a6)
  545.     cmp.w    #$538,22(a6)
  546.     bmi.s    CYB_ok2
  547.     move.w    #$538,22(a6)
  548. CYB_ok2:    move.w    22(a6),6(a5)
  549.     rts
  550. CYB_volslide:
  551.     moveq    #0,d0
  552.     move.b    3(a6),d0
  553.     lsr.b    #4,d0
  554.     tst.b    d0
  555.     beq.s    CYB_voldwn
  556.     add.w    d0,18(a6)
  557.     cmp.w    #64,18(a6)
  558.     bmi.s    CYB_ok3
  559.     move.w    #64,18(a6)
  560. CYB_ok3:    move.w    18(a6),8(a5)
  561.     rts
  562. CYB_voldwn:
  563.     moveq    #0,d0
  564.     move.b    3(a6),d0
  565.     and.b    #$0f,d0
  566.     sub.w    d0,18(a6)
  567.     bpl.s    CYB_ok4
  568.     clr.w    18(a6)
  569. CYB_ok4:    move.w    18(a6),8(a5)
  570.     rts
  571. CYB_arpegrt:
  572.     move.w    CYB_counter(PC),d0
  573.     cmp.w    #1,d0
  574.     beq.s    CYB_loop2
  575.     cmp.w    #2,d0
  576.     beq.s    CYB_loop3
  577.     cmp.w    #3,d0
  578.     beq.s    CYB_loop4
  579.     cmp.w    #4,d0
  580.     beq.s    CYB_loop2
  581.     cmp.w    #5,d0
  582.     beq.s    CYB_loop3
  583.     rts
  584. CYB_loop2:
  585.     moveq    #0,d0
  586.     move.b    3(a6),d0
  587.     lsr.b    #4,d0
  588.     bra.s    CYB_cont
  589. CYB_loop3:
  590.     moveq    #$00,d0
  591.     move.b    3(a6),d0
  592.     and.b    #$0f,d0
  593.     bra.s    CYB_cont
  594. CYB_loop4:
  595.     move.w    16(a6),d2
  596.     bra.s    CYB_endpart
  597. CYB_cont:
  598.     add.w    d0,d0
  599.     moveq    #0,d1
  600.     move.w    16(a6),d1
  601.     and.w    #$fff,d1
  602.     lea    CYB_arpeggio(PC),a0
  603. CYB_loop5:
  604.     move.w    (a0,d0),d2
  605.     cmp.w    (a0),d1
  606.     beq.s    CYB_endpart
  607.     addq.l    #2,a0
  608.     bra.s    CYB_loop5
  609. CYB_endpart:
  610.     move.w    d2,6(a5)
  611.     rts
  612. CYB_rout2:
  613.     lea    CYB_data,a0
  614.     move.l    a0,a3
  615.     add.l    #$0c,a3
  616.     move.l    a0,a2
  617.     add.l    #$3b8,a2
  618.     add.l    #$43c,a0
  619.     move.l    CYB_partnrplay(PC),d0
  620.     moveq    #0,d1
  621.     move.b    (a2,d0),d1
  622.     asl.l    #8,d1
  623.     asl.l    #2,d1
  624.     add.l    CYB_partnote(PC),d1
  625.     move.l    d1,CYB_partpoint
  626.     clr.w    CYB_dmacon
  627.     lea    $dff0a0,a5
  628.     lea    CYB_aud1temp(PC),a6
  629.     bsr    CYB_playit
  630.     lea    $dff0b0,a5
  631.     lea    CYB_aud2temp(PC),a6
  632.     bsr    CYB_playit
  633.     lea    $dff0c0,a5
  634.     lea    CYB_aud3temp(PC),a6
  635.     bsr    CYB_playit
  636.     lea    $dff0d0,a5
  637.     lea    CYB_aud4temp(PC),a6
  638.     bsr    CYB_playit
  639.     move.w    #$01f4,d0
  640. CYB_rls:    dbf    d0,CYB_rls
  641.     move.w    #$8000,d0
  642.     or.w    CYB_dmacon,d0
  643.     move.w    d0,$dff096
  644.     lea    CYB_aud4temp(PC),a6
  645.     cmp.w    #1,14(a6)
  646.     bne.s    CYB_voice3
  647.     move.l    10(a6),$dff0d0
  648.     move.w    #1,$dff0d4
  649. CYB_voice3:
  650.     
  651.     lea    CYB_aud3temp(PC),a6
  652.     cmp.w    #1,14(a6)
  653.     bne.s    CYB_voice2
  654.     move.w    #1,$dff0c4
  655. CYB_voice2:
  656.     
  657.     lea    CYB_aud2temp(PC),a6
  658.     cmp.w    #1,14(a6)
  659.     bne.s    CYB_voice1
  660.     move.l    10(a6),$dff0b0
  661.     move.w    #1,$dff0b4
  662. CYB_voice1:
  663.     lea    CYB_aud1temp(PC),a6
  664.     cmp.w    #1,14(a6)
  665.     bne.s    CYB_voice0
  666.     move.l    10(a6),$dff0a0
  667.     move.w    #1,$dff0a4
  668. CYB_voice0:
  669.     move.l    CYB_partnote(PC),d0
  670.     add.l    #$10,d0
  671.     move.l    d0,CYB_partnote
  672.     cmp.l    #$400,d0
  673.     bne.s    CYB_stop
  674. CYB_higher:
  675.     clr.l    CYB_partnote
  676.     addq.l    #1,CYB_partnrplay
  677.     moveq    #0,d0
  678.     move.w    CYB_maxpart(PC),d0
  679.     move.l    CYB_partnrplay(PC),d1
  680.     cmp.l    d0,d1
  681.     bne.s    CYB_stop
  682.     clr.l    CYB_partnrplay
  683.     ;st    Pflag
  684. CYB_stop:tst.w    CYB_status
  685.     beq.s    CYB_stop2
  686.     clr.w    CYB_status
  687.     bra.s    CYB_higher
  688. CYB_stop2:
  689.     rts
  690. CYB_playit:
  691.     
  692.     move.l    (a0,d1.l),(a6)
  693.     addq.l    #4,d1
  694.     moveq    #0,d2
  695.     move.b    2(a6),d2
  696.     and.b    #$f0,d2
  697.     lsr.b    #4,d2
  698.     move.b    (a6),d0
  699.     and.b    #$f0,d0
  700.     or.b    d0,d2
  701.     tst.b    d2
  702.     beq.s    CYB_nosamplechange
  703.     moveq    #0,d3
  704.     lea    CYB_samples(PC),a1
  705.     move.l    d2,d4
  706.     asl.l    #2,d2
  707.     mulu    #$1e,d4
  708.     move.l    (a1,d2),4(a6)
  709.     move.w    (a3,d4.l),8(a6)
  710.     move.w    2(a3,d4.l),18(a6)
  711.     move.w    4(a3,d4.l),d3
  712.     tst.w    d3
  713.     beq.s    CYB_displace
  714.     move.l    4(a6),d2
  715.     add.l    d3,d2
  716.     move.l    d2,4(a6)
  717.     move.l    d2,10(a6)
  718.     move.w    6(a3,d4.l),8(a6)
  719.     move.w    6(a3,d4.l),14(a6)
  720.     move.w    18(a6),8(a5)
  721.     bra.s    CYB_nosamplechange
  722. CYB_displace:
  723.     move.l    4(a6),d2
  724.     add.l    d3,d2
  725.     move.l    d2,10(a6)
  726.     move.w    6(a3,d4.l),14(a6)
  727.     move.w    18(a6),8(a5)
  728. CYB_nosamplechange:
  729.     move.w    (a6),d0
  730.     and.w    #$fff,d0
  731.     tst.w    d0
  732.     beq.s    CYB_retrout
  733.     move.w    (a6),16(a6)
  734.     move.w    20(a6),$dff096
  735.     move.l    4(a6),(a5)
  736.     move.w    8(a6),4(a5)
  737.     move.w    (a6),d0
  738.     and.w    #$fff,d0
  739.     move.w    d0,6(a5)
  740.     move.w    20(a6),d0
  741.     or.w    d0,CYB_dmacon
  742. CYB_retrout:
  743.     tst.w    (a6)
  744.     beq.s    CYB_nonewper
  745.     move.w    (a6),22(a6)
  746. CYB_nonewper:
  747.     move.b    2(a6),d0
  748.     and.b    #$0f,d0
  749.     cmp.b    #$0b,d0
  750.     beq.s    CYB_posjmp
  751.     cmp.b    #$0c,d0
  752.     beq.s    CYB_setvol
  753.     cmp.b    #$0d,d0
  754.     beq.s    CYB_break
  755.     cmp.b    #$0e,d0
  756.     beq.s    CYB_setfil
  757.     cmp.b    #$0f,d0
  758.     beq.s    CYB_setspeed
  759.     rts
  760. CYB_posjmp:
  761.     not.w    CYB_status
  762.     moveq    #0,d0
  763.     move.b    3(a6),d0
  764.     subq.b    #1,d0
  765.     move.l    d0,CYB_partnrplay
  766.     rts
  767. CYB_setvol:
  768.     move.b    3(a6),8(a5)
  769.     rts
  770. CYB_break:
  771.     not.w    CYB_status
  772.     rts
  773. CYB_setfil:
  774.     moveq    #0,d0
  775.     move.b    3(a6),d0
  776.     and.b    #1,d0
  777.     rol.b    #1,d0
  778.     and.b    #$fd,$bfe001
  779.     or.b    d0,$bfe001
  780.     rts
  781. CYB_setspeed:
  782.     move.b    3(a6),d0
  783.     and.b    #$0f,d0
  784.     beq.s    CYB_back
  785.     clr.w    CYB_counter
  786.     move.b    d0,CYB_cool+3
  787. CYB_back:    rts
  788. CYB_aud1temp:
  789.     dcb.w    10,0
  790.     dc.w    1
  791.     dcb.w    2,0
  792. CYB_aud2temp:
  793.     dcb.w    10,0
  794.     dc.w    2
  795.     dcb.w    2,0
  796. CYB_aud3temp:
  797.     dcb.w    10,0
  798.     dc.w    4
  799.     dcb.w    2,0
  800. CYB_aud4temp:
  801.     dcb.w    10,0
  802.     dc.w    8
  803.     dcb.w    2,0
  804. CYB_partnote:    dc.l    0
  805. CYB_partnrplay:    dc.l    0
  806. CYB_counter:    dc.w    0
  807. CYB_partpoint:    dc.l    0
  808. CYB_samples:    dc.l    0
  809. CYB_sample1:    dcb.l    31,0
  810. CYB_maxpart:    dc.w    0
  811. CYB_dmacon:    dc.w    0
  812. CYB_status:    dc.w    0
  813. CYB_arpeggio:
  814.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  815.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  816.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  817.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  818.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  819.  
  820.  
  821.             
  822.  
  823. ; ** THE COPPERLIST **
  824.  
  825. OURCOPPER:
  826.         dc.w    $120,0
  827.         dc.w    $122,0
  828.         dc.w    bpl1mod,-2,bpl2mod,-2
  829.         dc.w    diwstrt,$2c81+16,diwstop,$2cc1-16
  830.         dc.w    bplcon0,$6600,bplcon1,$0000
  831.         dc.w    ddfstrt,$30,ddfstop,$d0
  832.         dc.w    color01,$000
  833.         dc.w    color08,$000,color09,$f00,color10,$0f0,color11,$fff
  834.         dc.w    color12,$eaf,color13,$145,color14,$a00,color15,$eee
  835. bp2lo:    dc.w    bpl2ptl,$0000
  836. bp2hi:    dc.w    bpl2pth,$0000
  837. bp4lo:    dc.w    bpl4ptl,$0000
  838. bp4hi:    dc.w    bpl4pth,$0000
  839. bp6lo:    dc.w    bpl6ptl,$0000
  840. bp6hi:    dc.w    bpl6pth,$0000
  841. deltay2:wait    $3909,$fffe
  842.         dc.w    color01,$eee
  843. bp1lo:    dc.w    bpl1ptl,$0000
  844. bp1hi:    dc.w    bpl1pth,$0000
  845. bp3lo:    dc.w    bpl3ptl,$0000
  846. bp3hi:    dc.w    bpl3pth,$0000
  847. bp5lo:    dc.w    bpl5ptl,$0000
  848. bp5hi:    dc.w    bpl5pth,$0000
  849. deltay:    wait    $da09,$fffe
  850. abp1lo:    dc.w    bpl1ptl,$0000
  851. abp1hi:    dc.w    bpl1pth,$0000
  852. abp3lo:    dc.w    bpl3ptl,$0000
  853. abp3hi:    dc.w    bpl3pth,$0000
  854. abp5lo:    dc.w    bpl5ptl,$0000
  855. abp5hi:    dc.w    bpl5pth,$0000
  856.          DC.W    color01,$eee,color02,$dde
  857.         DC.W    color03,$bbd
  858.         DC.W    color04,$aac
  859.         DC.W    color05,$88c
  860.         DC.W    color06,$77b
  861.         DC.W    color07,$65a
  862.         end_copper
  863.         
  864.  
  865. ;LOCAL CONSTANTS
  866.  
  867. WBCOPPER:        DC.L    0
  868. GFXLIB:            DC.B     "graphics.library",0
  869. GFXBASE:        DC.L    0
  870. systemints:        dc.l    0
  871. scroll_offset:    dc.l    0
  872. screenx:        dc.l    picture
  873. screeny:        dc.l    picture2
  874. letter:            dc.b    0
  875. letter2:        dc.b    0
  876. val:            dc.l    0
  877. val2:            dc.l    0
  878. stopper:        dc.l    0
  879. stopper2:        dc.l    0
  880. speed:            dc.w    12
  881. ycord:        dc.l    0
  882. ycordminus:    dc.l    0
  883. ycord2:        dc.l    0
  884. ycordminus2:dc.l    0
  885.  
  886.  
  887. ;BINARY FILES TO BE INCLUDED
  888.     EVEN
  889. FONTSPACE:
  890. font:    
  891.     incbin    df0:METALCHARS
  892. picture2    
  893.     dcb.b    10000*3,0
  894. picture:
  895.     dcb.b    10000*3,0
  896. PLAY2:
  897.     INCBIN    DF1:PIC.IFF
  898. cyb_data:
  899.     incbin    df1:mod.count 
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.     
  908.     
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.     
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.     
  926.     
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.